BigQuery ML
#BigQuery
Doc
チュートリアル  |  BigQuery ML  |  Google Cloud
The ML.TRAINING_INFO function  |  BigQuery ML  |  Google Cloud
Manual feature preprocessing  |  BigQuery ML  |  Google Cloud
BigQuery ML の料金  |  BigQuery: クラウド データ ウェアハウス  |  Google Cloud
Links
Cloud OnAir BigQuery ML と AutoML Tables で はじめるマーケティング分析入門 2019年5月23…
WITH
中間クエリの WITH は CREAT MODEL ... AS 以降に書く必要がある
CREATE MODEL ... AS WITH ... AS SELECT みたいになって変だけどそういうもの
ゼロ埋め
ARIMA などで飛び飛びの値に対して適用すると結果列も飛び飛びになる
BigQuery GENERATE_TIMESTAMP_ARRAY でバケットを作って集計
日付バケットを作ってゼロで埋めたり
code:fill.sql
WITH params AS (
SELECT
DATE "2021-12-01" as since,
DATE "2021-12-31" as until,
), date_bucket AS (
SELECT bucket FROM params, UNNEST(GENERATE_DATE_ARRAY(params.since, params.until)) AS bucket
)
SELECT
bucket,
IFNULL(SUM(revenue), 0) AS revenue
FROM data_bucket LEFT JOIN some.your.table ON bucket = DATE(timestamp);
code:fill_cross_join.sql
WITH params AS (
SELECT
DATE "2021-12-01" as since,
DATE "2021-12-31" as until,
), date_bucket AS (
SELECT bucket FROM params, UNNEST(GENERATE_DATE_ARRAY(params.since, params.until)) AS bucket
), data AS (
SELECT date, service, revenue FROM some.your.table
), table AS ( -- CROSS JOIN して全組み合わせの集計テーブルを用意しておく
SELECT bucket as date, service
FROM date_bucket
CROSS JOIN (SELECT DISTINCT(service) as service FROM data)
)
SELECT date, service, IFNULL(SUM(revenue), 0) AS revenue
FROM table LEFT JOIN some.your.table USING(date, service) GROUP BY date, service
素振り
BigQuery ML でペンギンの体重を予測する  |  Google Cloud 回帰
ペンギンの体重知りたすぎる
CREATE MODEL でモデルを作る
model_type & input_label_cols
model_type="LINEAR_REG"
ML.TRAINING_INFO で統計情報を確認
コンソールのグラフでまあいい
ML.EVALUATE で評価
評価指標をみる、何が大事かはモデルによっていろいろ
ML.PREDICT で予測
predicted_<label_column_name>
ML.EXPLAIN_PREDICT で予測結果の説明
Explainable AI Offerings in BigQuery ML - BigQuery ML Explainable AI Overview  |  Google Cloud
行ごとにどの特徴が予測に影響しているかみる
Sharpley Value
シャープレイ値 - Wikipedia
SHAP(SHapley Additive exPlanations)で機械学習モデルを解釈する - Dropout
国勢調査データに基づいた分類モデルの構築と使用  |  BigQuery ML  |  Google Cloud 分類
まずデータ見るのいいね
同じデータを異なる形式で表している行をみつける
トレーニングデータをまとめるビューを作る
重複するカテゴリ変数を除く、トレーニングデータ、評価データ、予測に使うデータを分けている
CREATE MODEL
model_type="LOGISTIC_REG"
auto_class_weights=TRUE
ラベルの登場回数のバランスを取る
各クラスの頻度に反比例した重みを計算して使う
しれっと次の実行するクエリが変わってるな... なんか functional_weight といいおかしい
The CREATE MODEL statement for generalized linear models  |  BigQuery ML
まずこういう MODEL_TYPE ごとのドキュメントみてどういうオプションがあるのかみるのがよさそう
data_split_method="NO_SPLIT"
入力データをトレーニングセットと評価セットに分ける、ここでは View 作るときに分けているのでいらない
AUTO_SPLIT はデータ量によっていい感じに分ける、5万行未満なら2割が評価に回る
max_iterations=15
お前こんな絵かけたのか
https://gyazo.com/24fb38b660012790682846331cb5e3a4
ML.EVALUATE
precision recall accuracy
混同行列
https://gyazo.com/e81c44d76c68465102eef206fcc35a5f
ML.PREDICT
predicted_income_bracket_probs.label
predicted_income_bracket_probs.prob
そのラベルに属する確率
(predicted_income_bracket = income_bracket) AS correct とかしたら見やすい
ML.GLOBAL_EXPLAIN
ML.EXPLAIN_PREDICT は行ごとに説明してくれるけど全体での特徴の寄与を見たい場合
結婚>教育>仕事
いつも enable_global_explain=TRUE してたらいい気がするけどどうなんだろ?
BigQuery ML を使用して映画の評価に基づきレコメンデーションを行う  |  Google Cloud Matrix Factorization
CREATE MODEL
model_type="MATRIX_FACTORIZATION"
user_col, item_col
l2_reg、num_factors どこからくるの
精度出るやつを見つけるためにチューニングしろって感じだろうけど
明示的 / 暗黙的とは
feedback_type=IMPLICIT が指定されていたら暗黙的
BigQuery ML を使用して Google アナリティクス データからレコメンデーションを行う  |  Google Cloud こっちは暗黙的
協調フィルタリング入門
評価が暗黙的かどうか?
行列分解は、定額制のお客様、または Reservations を利用するお客様のみが使用できます。オンデマンドをご利用のお客様には、Flex Slots を利用して行列分解を使用することをおすすめします。
Google アナリティクス データからの 1 つの時系列を予測する  |  BigQuery ML  |  Google Cloud 時系列
The CREATE MODEL statement for time series models  |  BigQuery ML
ARIMA is 何
Auto Regressive & Moving Average を Integration したもの
CREATE MODEL
model_type="ARIMA_PLUS"
data_frequency="AUTO_FREQUENCY"
時系列のデータ頻度が推定される
decompose_time_series=TRUE
休日や季節の影響をモデルに保存する
holiday_region="US" みたいなパラメータがある
HOLIDAY_REGION - The CREATE MODEL statement for time series models  |  BigQuery ML
日付と total_visits しか渡してないけどそういうものなのか
説明変数追加するアルゴリズムは色々あるらしいけど BQML にはない
TIME_SERIES_ID_COL 渡したら複数の時系列について予測できる
ML.ARIMA_EVALUATE
次の 4 つの列(non_seasonal_{p,d,q}、has_drift)でトレーニング パイプライン内の ARIMA モデルを定義します。その後の 3 つの指標(log_likelihood、AIC、variance)は ARIMA モデルの適合プロセスに関連しています。
AIC が最も小さいものが選ばれてる?
42 のモデルの 42 はどこからくる? ARIMA_PLUS
ML.ARIMA_COEFFICIENTS
ML.FORECAST
STRUCT(30 AS horizon, 0.8 AS confidence_level)
30点と信頼度
ML.EXPLAIN_FORECAST
https://gyazo.com/fe2d82ee1b13e55bb0fcb28918251c15
お~
trend ってなに??
Large-scale time series forecasting best practices - The CREATE MODEL statement for time series models  |  BigQuery ML
データ増えたらハイパーパラメータ調整の次元 AUTO_ARIMA_MAX_ORDER を下げろという話
日本の在庫を減らそう 実用ARIMA.pdf
ARIMA についてぐぐったら出てきた、読み物としておもしろい
学習時に飛び飛びの値を与えてしまうと予測も飛び飛びになる
次の n 点を予測するところで飛び飛びになる
データによっては飛んでる日付に 0 を入れるのも手
次の時系列を予測するアルゴリズムだから、日々使おうとしたら日々学習せんといかんな
TRANSFORM
特徴量エンジニアリングで BigQuery ML TRANSFORM 句を使用する  |  Google Cloud TRANSFORM
predict 時に値を加工しなくていいように、学習時に元の値から特徴量への変換ロジックを書いておく
ハイパーパラメータ調整
モデルの種類によっては OPTIONS にハイパーパラメータ調整用のオプションがある
Hyperparameter tuning for CREATE MODEL statements  |  BigQuery  |  Google Cloud
The CREATE MODEL statement for Deep Neural Network (DNN) models  |  BigQuery  |  Google Cloud
code:linear
CREATE MODEL bqml_tutorial.hp_taxi_tip_model
OPTIONS
(model_type='linear_reg',
num_trials=20,
max_parallel_trials=2) AS ...